/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * TelaCompra.java
 *
 * Created on 03/11/2011, 22:38:14
 */
package gui.fiscal;

import banco.estoque.BancoCompra;
import banco.estoque.BancoProduto;
import banco.pessoa.BancoFornecedor;
import excecoes.estoque.DinheiroNegativoException;
import excecoes.estoque.NenhumProdutoEncontradoException;
import excecoes.estoque.QuantidadeNegativaException;
import excecoes.fiscal.CodigoInvalidoException;
import excecoes.pessoa.CpfCnpjExistenteException;
import excecoes.pessoa.CpfCnpjInvalidoException;
import excecoes.pessoa.LocalizacaoInvalidaException;
import excecoes.pessoa.NomeFantasiaNuloException;
import excecoes.pessoa.NomeInvalidoException;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import smartMarket.estoque.Produto;
import smartMarket.fiscal.Compra;
import smartMarket.pessoa.Fornecedor;

/**
 *
 * @author dyego
 */
public class JFrameNovaCompra extends javax.swing.JFrame {

    // Atributos
    private Compra compra = new Compra();
    private Produto produto;
    private BancoProduto bancoProduto;
    private String entrada0;
    private String entrada2;
    private String entrada3;
    private String entrada4;
    private boolean verificarCodigoDeBarra;
    //acrescentar a coluna discrição?  

    private void setInformacoesFornecedorPorCodigo() throws NullPointerException, SQLException, NomeInvalidoException, DinheiroNegativoException, CpfCnpjInvalidoException {

        BancoFornecedor bf = new BancoFornecedor();
        Fornecedor fornecedor;
        Integer codigoFornecedor;

        String sCodigoFornecedor = jTextFieldCodigo.getText();

        if ("".equals(sCodigoFornecedor)) {///
            jTextFieldCodigo.setText("");
            jFormattedTextFieldCNPJ.setText("");
            jTextFieldNome.setText("");
        } else {
            codigoFornecedor = Integer.parseInt(sCodigoFornecedor);
            try {
                fornecedor = bf.buscar(codigoFornecedor);
                jFormattedTextFieldCNPJ.setText(fornecedor.getCPF_CNPJ());
                jTextFieldNome.setText(fornecedor.getNome());
            } catch (CpfCnpjExistenteException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            } catch (LocalizacaoInvalidaException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            } catch (NomeFantasiaNuloException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    private void setInformacoesFornecedorPorCNPJ() throws NullPointerException, SQLException, NomeInvalidoException, DinheiroNegativoException, CpfCnpjInvalidoException { //

        BancoFornecedor bf = new BancoFornecedor();
        Fornecedor Fornecedor;
        
        String sCnpjFornecedor = jFormattedTextFieldCNPJ.getText();

        //if (jTextFieldCodigocnpjFornecedor.getText().equals("")) {
        if ("".equals(sCnpjFornecedor)) {
            jTextFieldCodigo.setText("");
            jFormattedTextFieldCNPJ.setText("");
            jTextFieldNome.setText("");///
        } else {
             try {
                Fornecedor = bf.buscar(sCnpjFornecedor);
                jTextFieldCodigo.setText("" + Fornecedor.getCodigo());
                jTextFieldNome.setText(Fornecedor.getNome());
            } catch (CpfCnpjExistenteException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            } catch (LocalizacaoInvalidaException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            } catch (NomeFantasiaNuloException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
    }



    private void substituirValor() throws NumberFormatException, SQLException, DinheiroNegativoException, QuantidadeNegativaException,
            NenhumProdutoEncontradoException {

        int linhaSelecionada = jTableProdutos.getSelectedRow();

        // Obtem o modelo da JTable  
        DefaultTableModel modelo = (DefaultTableModel) jTableProdutos.getModel();

        // Obtem o valor atual na coluna  
        String sValor0 = "" + modelo.getValueAt(linhaSelecionada, 0);

        if (!sValor0.equals(entrada0) && !sValor0.equals("")) {
            BancoProduto bp = new BancoProduto();

            try {

                int codigo = Integer.parseInt(sValor0);

                Produto prod = bp.buscar(codigo);

                modelo.setValueAt(prod.getCodigo(), linhaSelecionada, 0);
                modelo.setValueAt(prod.getDescricao(), linhaSelecionada, 1);
                modelo.setValueAt("" + 1, linhaSelecionada, 2);
                modelo.setValueAt(prod.getPreco(), linhaSelecionada, 3);

                compra.addCarrinho(codigo, 1, prod.getPreco());

            } catch (NumberFormatException e) {
                JOptionPane.showMessageDialog(null, "Erro na formatação do número");
            } catch (SQLException e) {
                
            } catch (DinheiroNegativoException dne) {
                JOptionPane.showMessageDialog(null, dne.getMessage());
            } catch (QuantidadeNegativaException qne) {
                JOptionPane.showMessageDialog(null, qne.getMessage());
            } catch (NenhumProdutoEncontradoException e) {
                modelo.removeRow(linhaSelecionada);
            } catch (CodigoInvalidoException cie) {
                JOptionPane.showMessageDialog(null, cie.getMessage());
            }

            if (verificarCodigoDeBarra) {

                verificarCodigoDeBarra = false;

                try {

                    Produto prod = bp.buscar(sValor0);
                    modelo.setValueAt(prod.getCodigo(), linhaSelecionada, 0);
                    modelo.setValueAt(prod.getDescricao(), linhaSelecionada, 1);
                    modelo.setValueAt("" + 1, linhaSelecionada, 2);
                    modelo.setValueAt(prod.getPreco(), linhaSelecionada, 3);

                    compra.addCarrinho(prod.getCodigo(), 1, prod.getPreco());

                } catch (NumberFormatException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (SQLException e) {
                    // new JFrameTelaErro(e.getMessage()).setVisible(true);///
                } catch (DinheiroNegativoException dne) {
                    JOptionPane.showMessageDialog(null, dne.getMessage());
                } catch (QuantidadeNegativaException qne) {
                    JOptionPane.showMessageDialog(null, qne.getMessage());
                } catch (NenhumProdutoEncontradoException e) {
                    modelo.removeRow(linhaSelecionada);
                } catch (CodigoInvalidoException cie) {
                    JOptionPane.showMessageDialog(null, cie.getMessage());
                }
            }
        }

        if (!sValor0.equals("")) {

            String sValor2 = "" + modelo.getValueAt(linhaSelecionada, 2);
            String sValor3 = "" + modelo.getValueAt(linhaSelecionada, 3);

            if (!sValor2.equals(entrada2) || !sValor3.equals(entrada3)) {
                try {

                    int codigo = Integer.parseInt(sValor0);
                    int qtd = Integer.parseInt(sValor2);
                    float preco = Float.parseFloat(sValor3);
                    float valor = preco * qtd;

                    compra.alterarCarrinho(codigo, qtd, preco);
                    modelo.setValueAt(valor, linhaSelecionada, 4);

                } catch (IllegalArgumentException iae) {

                    modelo.setValueAt(entrada2, linhaSelecionada, 1);
                    modelo.setValueAt(entrada3, linhaSelecionada, 2);
                    //MENSAGEM
                } catch (DinheiroNegativoException dne) {
                    JOptionPane.showMessageDialog(null, dne.getMessage());
                    modelo.setValueAt(0.01, linhaSelecionada, 3);
                } catch (QuantidadeNegativaException qne) {
                    JOptionPane.showMessageDialog(null, qne.getMessage());
                    modelo.setValueAt("1", linhaSelecionada, 2);
                }
            }//
        } else {

            int codigo = Integer.parseInt(entrada0);
            int qtd = Integer.parseInt(entrada3);
            modelo.removeRow(linhaSelecionada);
            compra.removeCarrinho(codigo, qtd);

        }

        //Setar total
        jFormattedTextFieldTotal.setText("" + compra.getValorTotal());
    }

    private void aplicarDesconto() {
        Float desconto;

        if ("".equals(null + jFormattedTextFieldDesconto.getText())) {
            desconto = 0.0f;
            jFormattedTextFieldDesconto.setText("0.00");
        } else {
            
            try {
                desconto = Float.parseFloat(jFormattedTextFieldDesconto.getText());
                compra.setDesconto(desconto);
                jFormattedTextFieldTotal.setText("" + compra.getValorTotal());
            } catch (DinheiroNegativoException dne) {
                JOptionPane.showMessageDialog(null, dne.getMessage());
                jFormattedTextFieldDesconto.setText("0.00");
            } catch (Exception e) {
                jFormattedTextFieldDesconto.setText("0.00");
            }
            
        }  
    }

    private void setCompra() throws SQLException, NomeInvalidoException, NullPointerException, DinheiroNegativoException, CpfCnpjInvalidoException {
        BancoFornecedor bf = new BancoFornecedor();

        Fornecedor fornecedor;

        String sCodigoFornecedor = jTextFieldCodigo.getText();
        if ("".equals(sCodigoFornecedor)) {
            //EXCEÇOES
        } else {
            Integer codigoFornecedor = Integer.parseInt(jTextFieldCodigo.getText());
            try {
                fornecedor = bf.buscar(codigoFornecedor);
                compra.setFornecedor(fornecedor);
            } catch (CpfCnpjExistenteException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            } catch (LocalizacaoInvalidaException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            } catch (NomeFantasiaNuloException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            }


        }

        //set informações da nota     
        String data = "" + jFormattedTextFieldDataEntrada.getText();
        if ("".equals(data)) {
            //EXCEÇOES
        } else {
            compra.setData(data);
        }

        String sNumero = "" + jTextFieldNumero.getText();
        if ("".equals(sNumero)) {
            //EXCEÇOES
        } else {
            compra.setNumero(Integer.parseInt(sNumero));
        }
    }

    private void cadastrar() throws SQLException {
        BancoCompra bc = new BancoCompra();
        bc.novo(this.compra);

    }

    // Contrutor
    public JFrameNovaCompra() {
        initComponents();
        
        
        try {
            BancoCompra bc = new BancoCompra();
            jTextFieldNumero.setText("" + (bc.ultimaCompra() + 1));
        } catch (SQLException ex) {
            Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanelInformacoesFornecedor = new javax.swing.JPanel();
        jLabelCodigo = new javax.swing.JLabel();
        jLabelNome = new javax.swing.JLabel();
        jTextFieldCodigo = new javax.swing.JTextField();
        jTextFieldNome = new javax.swing.JTextField();
        jLabelCNPJ = new javax.swing.JLabel();
        jFormattedTextFieldCNPJ = new javax.swing.JFormattedTextField();
        jPanelInformacoesNota = new javax.swing.JPanel();
        jLabelNumero = new javax.swing.JLabel();
        jLabelDataEntrada = new javax.swing.JLabel();
        jTextFieldNumero = new javax.swing.JTextField();
        jFormattedTextField1 = new javax.swing.JFormattedTextField();
        jFormattedTextFieldDataEntrada = new javax.swing.JFormattedTextField();
        jScrollPaneProdutos = new javax.swing.JScrollPane();
        jTableProdutos = new javax.swing.JTable();
        jButtonFinalizarCompra = new javax.swing.JButton();
        jPanelTotal = new javax.swing.JPanel();
        jLabelTotal = new javax.swing.JLabel();
        jFormattedTextFieldDesconto = new javax.swing.JFormattedTextField();
        jLabelDesconto = new javax.swing.JLabel();
        jFormattedTextFieldTotal = new javax.swing.JFormattedTextField();
        jButtonCancelar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jPanelInformacoesFornecedor.setBorder(javax.swing.BorderFactory.createTitledBorder("Informações do Fornecedor"));

        jLabelCodigo.setText("Código:");

        jLabelNome.setText("Nome:");

        jTextFieldCodigo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextFieldCodigoActionPerformed(evt);
            }
        });
        jTextFieldCodigo.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextFieldCodigoFocusLost(evt);
            }
        });
        jTextFieldCodigo.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jTextFieldCodigoKeyPressed(evt);
            }
        });

        jTextFieldNome.setEditable(false);
        jTextFieldNome.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextFieldNomeActionPerformed(evt);
            }
        });

        jLabelCNPJ.setText("CNPJ:");

        jFormattedTextFieldCNPJ.setEditable(false);
        try {
            jFormattedTextFieldCNPJ.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("##.###.###/####-##")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }
        jFormattedTextFieldCNPJ.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                jFormattedTextFieldCNPJKeyPressed(evt);
            }
        });

        javax.swing.GroupLayout jPanelInformacoesFornecedorLayout = new javax.swing.GroupLayout(jPanelInformacoesFornecedor);
        jPanelInformacoesFornecedor.setLayout(jPanelInformacoesFornecedorLayout);
        jPanelInformacoesFornecedorLayout.setHorizontalGroup(
            jPanelInformacoesFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelInformacoesFornecedorLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelInformacoesFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanelInformacoesFornecedorLayout.createSequentialGroup()
                        .addGap(4, 4, 4)
                        .addComponent(jLabelNome))
                    .addComponent(jLabelCodigo))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanelInformacoesFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(jPanelInformacoesFornecedorLayout.createSequentialGroup()
                        .addComponent(jTextFieldCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(21, 21, 21)
                        .addComponent(jLabelCNPJ)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jFormattedTextFieldCNPJ, javax.swing.GroupLayout.PREFERRED_SIZE, 171, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jTextFieldNome))
                .addContainerGap(26, Short.MAX_VALUE))
        );
        jPanelInformacoesFornecedorLayout.setVerticalGroup(
            jPanelInformacoesFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelInformacoesFornecedorLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelInformacoesFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabelCNPJ)
                    .addComponent(jTextFieldCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jFormattedTextFieldCNPJ, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanelInformacoesFornecedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelNome)
                    .addComponent(jTextFieldNome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(22, Short.MAX_VALUE))
        );

        jPanelInformacoesNota.setBorder(javax.swing.BorderFactory.createTitledBorder("Informações da Nota"));

        jLabelNumero.setText("Número:");

        jLabelDataEntrada.setText("Data da Entrada:");

        jTextFieldNumero.setEditable(false);

        jFormattedTextField1.setText("jFormattedTextField1");

        try {
            jFormattedTextFieldDataEntrada.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("##/##/####")));
        } catch (java.text.ParseException ex) {
            ex.printStackTrace();
        }

        javax.swing.GroupLayout jPanelInformacoesNotaLayout = new javax.swing.GroupLayout(jPanelInformacoesNota);
        jPanelInformacoesNota.setLayout(jPanelInformacoesNotaLayout);
        jPanelInformacoesNotaLayout.setHorizontalGroup(
            jPanelInformacoesNotaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelInformacoesNotaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelInformacoesNotaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabelDataEntrada)
                    .addComponent(jLabelNumero))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanelInformacoesNotaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jTextFieldNumero)
                    .addComponent(jFormattedTextFieldDataEntrada, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(59, 59, 59)
                .addComponent(jFormattedTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanelInformacoesNotaLayout.setVerticalGroup(
            jPanelInformacoesNotaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelInformacoesNotaLayout.createSequentialGroup()
                .addGroup(jPanelInformacoesNotaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanelInformacoesNotaLayout.createSequentialGroup()
                        .addGap(58, 58, 58)
                        .addComponent(jFormattedTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(jPanelInformacoesNotaLayout.createSequentialGroup()
                        .addGroup(jPanelInformacoesNotaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabelNumero)
                            .addComponent(jTextFieldNumero, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addGroup(jPanelInformacoesNotaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabelDataEntrada)
                            .addComponent(jFormattedTextFieldDataEntrada, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jScrollPaneProdutos.setBorder(javax.swing.BorderFactory.createTitledBorder("Produtos"));

        jTableProdutos.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null}
            },
            new String [] {
                "Código", "Descrição", "Quantidade", "Preço", "Total"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.Object.class, java.lang.Integer.class, java.lang.Float.class, java.lang.Float.class
            };
            boolean[] canEdit = new boolean [] {
                true, false, true, true, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jTableProdutos.addContainerListener(new java.awt.event.ContainerAdapter() {
            public void componentAdded(java.awt.event.ContainerEvent evt) {
                jTableProdutosComponentAdded(evt);
            }
            public void componentRemoved(java.awt.event.ContainerEvent evt) {
                jTableProdutosComponentRemoved(evt);
            }
        });
        jTableProdutos.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTableProdutosFocusLost(evt);
            }
        });
        jScrollPaneProdutos.setViewportView(jTableProdutos);

        jButtonFinalizarCompra.setText("Finalizar Compra");
        jButtonFinalizarCompra.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonFinalizarCompraActionPerformed(evt);
            }
        });

        jPanelTotal.setBorder(javax.swing.BorderFactory.createTitledBorder("Total"));

        jLabelTotal.setText("Total:");

        jFormattedTextFieldDesconto.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#,##0.00"))));
        jFormattedTextFieldDesconto.setText("0,00");
        jFormattedTextFieldDesconto.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                jFormattedTextFieldDescontoFocusLost(evt);
            }
        });

        jLabelDesconto.setText("Desconto:");

        jFormattedTextFieldTotal.setEditable(false);
        jFormattedTextFieldTotal.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#,##0.00"))));
        jFormattedTextFieldTotal.setText("0,00");

        javax.swing.GroupLayout jPanelTotalLayout = new javax.swing.GroupLayout(jPanelTotal);
        jPanelTotal.setLayout(jPanelTotalLayout);
        jPanelTotalLayout.setHorizontalGroup(
            jPanelTotalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelTotalLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabelDesconto)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jFormattedTextFieldDesconto, javax.swing.GroupLayout.PREFERRED_SIZE, 98, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(45, 45, 45)
                .addComponent(jLabelTotal)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jFormattedTextFieldTotal, javax.swing.GroupLayout.PREFERRED_SIZE, 98, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanelTotalLayout.setVerticalGroup(
            jPanelTotalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelTotalLayout.createSequentialGroup()
                .addGroup(jPanelTotalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelDesconto)
                    .addComponent(jFormattedTextFieldDesconto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabelTotal)
                    .addComponent(jFormattedTextFieldTotal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jButtonCancelar.setText("Cancelar");
        jButtonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonCancelarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jPanelInformacoesFornecedor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(jPanelInformacoesNota, javax.swing.GroupLayout.PREFERRED_SIZE, 269, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jScrollPaneProdutos, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 812, Short.MAX_VALUE)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jPanelTotal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 273, Short.MAX_VALUE)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addComponent(jButtonCancelar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(jButtonFinalizarCompra))))
                        .addGap(24, 24, 24))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jPanelInformacoesFornecedor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(11, 11, 11)
                        .addComponent(jPanelInformacoesNota, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addGap(18, 18, 18)
                .addComponent(jScrollPaneProdutos, javax.swing.GroupLayout.PREFERRED_SIZE, 210, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jPanelTotal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButtonFinalizarCompra)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButtonCancelar)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

private void jTextFieldCodigoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextFieldCodigoActionPerformed
}//GEN-LAST:event_jTextFieldCodigoActionPerformed

private void jTextFieldNomeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jTextFieldNomeActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_jTextFieldNomeActionPerformed

private void jButtonFinalizarCompraActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonFinalizarCompraActionPerformed
    if(jTextFieldCodigo.getText().equals("")||jFormattedTextFieldCNPJ.getText().equals("")){
        JOptionPane.showMessageDialog(null, "Informar Fornecedor");
        return;//Não executa os comandos abaixo        
    }
    if(jFormattedTextFieldTotal.getText().equals("0,00")){
        JOptionPane.showMessageDialog(null, "Informar Produtos");
        return;//Não executa os comandos abaixo       
    }
    if (jFormattedTextFieldDataEntrada.getText().equals("  /  /    ")){
        JOptionPane.showMessageDialog(null, "Informar Data");
        return;
    }
    boolean cadastrar = false;

    try {
            setCompra();
            cadastrar = true;

    } catch (NullPointerException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (SQLException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (NomeInvalidoException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (DinheiroNegativoException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (CpfCnpjInvalidoException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    if (cadastrar) {
        try {
            cadastrar();
            this.setVisible(false);

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}//GEN-LAST:event_jButtonFinalizarCompraActionPerformed

private void jButtonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCancelarActionPerformed
    this.setVisible(false);
}//GEN-LAST:event_jButtonCancelarActionPerformed

private void jTextFieldCodigoFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldCodigoFocusLost
    try {
        setInformacoesFornecedorPorCodigo();
    } catch (NullPointerException ex) {
        Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SQLException ex) {
        Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
    } catch (NomeInvalidoException ex) {
        Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
    } catch (DinheiroNegativoException ex) {
        Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
    } catch (CpfCnpjInvalidoException ex) {
        Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
    }
}//GEN-LAST:event_jTextFieldCodigoFocusLost

private void jTableProdutosFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTableProdutosFocusLost
// TODO add your handling code here:
}//GEN-LAST:event_jTableProdutosFocusLost

private void jFormattedTextFieldDescontoFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jFormattedTextFieldDescontoFocusLost
    aplicarDesconto();
}//GEN-LAST:event_jFormattedTextFieldDescontoFocusLost

private void jTableProdutosComponentAdded(java.awt.event.ContainerEvent evt) {//GEN-FIRST:event_jTableProdutosComponentAdded
    int linhaSelecionada = jTableProdutos.getSelectedRow();

    // Obtem o modelo da JTable  
    DefaultTableModel modelo = (DefaultTableModel) jTableProdutos.getModel();
    entrada0 = "" + modelo.getValueAt(linhaSelecionada, 0);
    entrada2 = "" + modelo.getValueAt(linhaSelecionada, 1);
    entrada3 = "" + modelo.getValueAt(linhaSelecionada, 2);
}//GEN-LAST:event_jTableProdutosComponentAdded

private void jTableProdutosComponentRemoved(java.awt.event.ContainerEvent evt) {//GEN-FIRST:event_jTableProdutosComponentRemoved
    try {
        substituirValor();
    } catch (NumberFormatException ex) {
        Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
    } catch (SQLException ex) {
        Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
    } catch (DinheiroNegativoException ex) {
        Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
    } catch (QuantidadeNegativaException ex) {
        Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
    } catch (NenhumProdutoEncontradoException ex) {
        Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
    }
}//GEN-LAST:event_jTableProdutosComponentRemoved

private void jTextFieldCodigoKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldCodigoKeyPressed
    if(evt.getKeyCode()== evt.VK_ENTER){
        boolean buscar = true;
        if(jTextFieldCodigo.getText().equals("")){
            JOptionPane.showMessageDialog(null, "Favor informar codigo do cliente");
            buscar=false;
        }
        BancoFornecedor bc = new BancoFornecedor();
        String codigo=jTextFieldCodigo.getText();
            try {
                bc.buscar(Integer.parseInt(codigo));
                setInformacoesFornecedorPorCodigo();                
            } catch (SQLException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            } catch (NullPointerException ex) {
                JOptionPane.showMessageDialog(null, "Fornecedor não encontrado");
                return;
            } catch (NomeInvalidoException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            } catch (CpfCnpjInvalidoException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);    
            } catch (DinheiroNegativoException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            } catch (CpfCnpjExistenteException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            } catch (LocalizacaoInvalidaException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            } catch (NomeFantasiaNuloException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            }

    }        
}//GEN-LAST:event_jTextFieldCodigoKeyPressed

private void jFormattedTextFieldCNPJKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jFormattedTextFieldCNPJKeyPressed
if(evt.getKeyCode()== evt.VK_ENTER){
        boolean buscar = true;
        if(jTextFieldCodigo.getText().equals("")){
            JOptionPane.showMessageDialog(null, "Favor informar codigo do cliente");
            buscar=false;
        }
        BancoFornecedor bc = new BancoFornecedor();
        String codigo=jTextFieldCodigo.getText();
            try {
                bc.buscar(Integer.parseInt(codigo));
                setInformacoesFornecedorPorCNPJ();                
            } catch (SQLException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            } catch (NullPointerException ex) {
                JOptionPane.showMessageDialog(null, "Fornecedor não encontrado");
                return;
            } catch (NomeInvalidoException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            } catch (CpfCnpjInvalidoException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);    
            } catch (DinheiroNegativoException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            } catch (CpfCnpjExistenteException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            } catch (LocalizacaoInvalidaException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            } catch (NomeFantasiaNuloException ex) {
                Logger.getLogger(JFrameNovaCompra.class.getName()).log(Level.SEVERE, null, ex);
            }

    }
}//GEN-LAST:event_jFormattedTextFieldCNPJKeyPressed


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButtonCancelar;
    private javax.swing.JButton jButtonFinalizarCompra;
    private javax.swing.JFormattedTextField jFormattedTextField1;
    private javax.swing.JFormattedTextField jFormattedTextFieldCNPJ;
    private javax.swing.JFormattedTextField jFormattedTextFieldDataEntrada;
    private javax.swing.JFormattedTextField jFormattedTextFieldDesconto;
    private javax.swing.JFormattedTextField jFormattedTextFieldTotal;
    private javax.swing.JLabel jLabelCNPJ;
    private javax.swing.JLabel jLabelCodigo;
    private javax.swing.JLabel jLabelDataEntrada;
    private javax.swing.JLabel jLabelDesconto;
    private javax.swing.JLabel jLabelNome;
    private javax.swing.JLabel jLabelNumero;
    private javax.swing.JLabel jLabelTotal;
    private javax.swing.JPanel jPanelInformacoesFornecedor;
    private javax.swing.JPanel jPanelInformacoesNota;
    private javax.swing.JPanel jPanelTotal;
    private javax.swing.JScrollPane jScrollPaneProdutos;
    private javax.swing.JTable jTableProdutos;
    private javax.swing.JTextField jTextFieldCodigo;
    private javax.swing.JTextField jTextFieldNome;
    private javax.swing.JTextField jTextFieldNumero;
    // End of variables declaration//GEN-END:variables
}
